package pe.gob.mtpe.renoccsys.managedBeans;



import java.io.IOException;
import java.io.Serializable;
import java.util.List;

import javax.el.ELContext;
import javax.el.ExpressionFactory;
import javax.el.MethodExpression;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext; 
import javax.servlet.http.HttpSession;

import org.primefaces.component.menuitem.MenuItem;
import org.primefaces.component.submenu.Submenu;
import org.primefaces.context.RequestContext;
import org.primefaces.model.DefaultMenuModel;
import org.primefaces.model.MenuModel;

import pe.gob.mtpe.renoccsys.utils.FacesUtils;

 


@ManagedBean(name="menuBean")
@SessionScoped
public class MenuBean implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1336811357241296446L;
	
	
	
	
	private MenuModel menuModel;
	
	
	private String  vieneMenu;
	@ManagedProperty("#{loginBean.penienteActualizacion}")
	private boolean penienteActualizacion;
	
	
	public MenuBean() {		
		
		menuModel= new DefaultMenuModel();
			
	}

	/**
	 * @Construyendo el menú 
	 */
	private void construyeMenu(){
		FacesContext facesCtx = FacesContext.getCurrentInstance();
		ELContext elCtx = facesCtx.getELContext();
		ExpressionFactory expFact = facesCtx.getApplication().getExpressionFactory();
		
		
		/*********************************menu mantenimiento****************************************/
		MenuItem mantenimiento=new MenuItem();

		mantenimiento.setId("id_mantenimiento");
		mantenimiento.setValue("Mantenimiento");
		mantenimiento.setIcon("icon-herramienta-32");
		mantenimiento.setAjax(true);						 
		String urlmantenimiento="#{menuBean.redMantenimiento}";
		
		MethodExpression metodomantenimiento=expFact.createMethodExpression(elCtx,urlmantenimiento, String.class, new Class[0]);
		mantenimiento.setActionExpression(metodomantenimiento);		
		menuModel.addMenuItem(mantenimiento);
		
		/*********************************menu gestion****************************************/
		MenuItem gestioObras=new MenuItem();

		gestioObras.setId("id_gestioObras");
		gestioObras.setValue("Gestión de Obras");
		gestioObras.setIcon("icon-gestion-32");
		gestioObras.setAjax(true);						 
		String urlgestioObras="#{menuBean.redgestioObras}";
		
		MethodExpression metodogestioObras=expFact.createMethodExpression(elCtx,urlgestioObras, String.class, new Class[0]);
		gestioObras.setActionExpression(metodogestioObras);		
		menuModel.addMenuItem(gestioObras);
		
		
		/*********************************menu reportes****************************************/
		MenuItem reportes=new MenuItem();

		reportes.setId("id_reportes");
		reportes.setValue("Reportes");
		reportes.setIcon("icon-reportes-32");
		reportes.setAjax(true);						 
		String urlreportes="#{menuBean.redreportes}";
		
		MethodExpression metodoreportes=expFact.createMethodExpression(elCtx,urlreportes, String.class, new Class[0]);
		reportes.setActionExpression(metodoreportes);		
		menuModel.addMenuItem(reportes);
		
		
		/*********************************menu acceso al retcc****************************************/
		MenuItem acRetcc=new MenuItem();

		acRetcc.setId("id_acRetcc");
		acRetcc.setValue("Acceso al Retcc");
		acRetcc.setIcon("icon-casco-32");
		acRetcc.setAjax(true);						 
		String urlacRetcc="#{menuBean.redacRetcc}";
		
		MethodExpression metodoacRetcc=expFact.createMethodExpression(elCtx,urlacRetcc, String.class, new Class[0]);
		acRetcc.setActionExpression(metodoacRetcc);		
		menuModel.addMenuItem(acRetcc);
		
		/*********************************menu guia****************************************/
		MenuItem guiaUsuario=new MenuItem();

		guiaUsuario.setId("id_guiaUsuario");
		guiaUsuario.setValue("Guia de Usuario");
		guiaUsuario.setIcon("icon-guia-32");
		guiaUsuario.setAjax(true);	
		String urlguiaUsuario="#{menuBean.redguiaUsuario}";
		
		MethodExpression metodoguiaUsuario=expFact.createMethodExpression(elCtx,urlguiaUsuario, String.class, new Class[0]);
		guiaUsuario.setActionExpression(metodoguiaUsuario);		
		menuModel.addMenuItem(guiaUsuario);
		
				
		MenuItem salir=new MenuItem();
 
		salir.setId("id_Salir");
		salir.setValue("Salir");
		salir.setAjax(true);						 
		String url="#{menuBean.efectuarSalir}";
		
		MethodExpression metodo=expFact.createMethodExpression(elCtx,url, String.class, new Class[0]);
		salir.setActionExpression(metodo);		
		menuModel.addMenuItem(salir);
        
	        
       
	}
	
	public String efectuarSalir(){
		String vista="pretty:aviso";
		FacesUtils.removeUsuarioLogueado();
		FacesUtils.removeSessionAttribute("loginBean");
		FacesUtils.removeSessionAttribute("usuarioBean");
        FacesContext facesContext = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(false);
        session.invalidate();
        
        return  vista;
		/*System.out.println("Salir=> Entro a SALIR");
		FacesUtils.removeUsuarioLogueado();
		//FacesUtils.removeSessionAttribute("encuestaBean");
		FacesUtils.removeSessionAttribute("loginBean");
		FacesUtils.removeSessionAttribute("usuarioBean");
		FacesContext facesContext = FacesContext.getCurrentInstance();
		ExternalContext ec = facesContext.getExternalContext();
		HttpSession httpSession = (HttpSession)facesContext.getExternalContext().getSession(false);
		httpSession.invalidate();
		//vista="pretty:login";			
		try {
			//DECOMENTAR EN PRODUCCION
			FacesContext.getCurrentInstance().getExternalContext().redirect("http://appweb.trabajo.gob.pe/si.renocc/index.jsp");
			//COMENTAR EN PRODUCCION
			//FacesContext.getCurrentInstance().getExternalContext().redirect(ec.getRequestContextPath());
		} catch (IOException e) {				
			e.printStackTrace();
		}*/
	
	}
	
	/**
	 * 
	 */
	
	
	/**
	 * 
	 * Redireccion al cambio de contraseÑas
	 * 
	 */
	public String redMantenimiento() {
		String vista = "";			
		vista = "pretty:lst_persona";
		FacesUtils.removeSessionAttribute("personaBean");
		return vista;
	}
	
	public String redgestioObras() {
		String vista = "";			
		FacesUtils.removeSessionAttribute("renoccBean");	
		vista = "pretty:gesionObra";
		
		return vista;
	}
	public String redreportes() {
		String vista = "";
		FacesUtils.removeSessionAttribute("reporteBean");		
		vista = "pretty:rpt_obras";
		
		return vista;
	}
	public String redacRetcc() {
		String vista = "";		
		
		if(penienteActualizacion==true){
			vista = "pretty:penAct";
		}else {
			vista = "pretty:acRetcc";
			FacesUtils.removeSessionAttribute("retccBean");	
		}		
		
		return vista;
	}
	 
	public String redguiaUsuario() {
		String vista = "";		
		String actionpath = "/si.renocc/resources/manual/manual_renocc.pdf";
		RequestContext.getCurrentInstance().
		execute("window.open('" + actionpath + "')");
		
		return vista;
	}

	
	/**
	 * @zona get set
	 */


	 

	public MenuModel getMenuModel() {
		if(menuModel.getContents().size()==0){
			construyeMenu();
		}
		return menuModel;
	}

	public boolean isPenienteActualizacion() {
		return penienteActualizacion;
	}

	public void setPenienteActualizacion(boolean penienteActualizacion) {
		this.penienteActualizacion = penienteActualizacion;
	}

	 

	

	
	
}
